package com.xs.letcode;

/**
 * Created by FlyDonkey on 2019/2/17 22:31
 * 给出一个 32 位的有符号整数，你需要将这个整数中每位上的数字进行反转。
 * <p>
 * 示例 1:
 * <p>
 * 输入: 123
 * 输出: 321
 * 示例 2:
 * <p>
 * 输入: -123
 * 输出: -321
 * 示例 3:
 * <p>
 * 输入: 120
 * 输出: 21
 * 注意:
 * <p>
 * 假设我们的环境只能存储得下 32 位的有符号整数，则其数值范围为 [−2的31次方,  2的31次方 − 1]。请根据这个假设，如果反转后整数溢出那么就返回 0。
 */
public class IntegerInversion7 {

    public static int reverse(int x) {
        String s = String.valueOf(x);
        if (s.contains("-")) {
            String inverse = inverse(s.substring(1));
            String result = "-" + inverse;
            return stringToInt(result);
        } else {
            String inverse = inverse(s);
            return stringToInt(inverse);
        }
    }

    //翻转字符串
    private static String inverse(String input) {
        char[] chars = input.toCharArray();
        char[] resultChar = new char[chars.length];
        int index = 0;
        for (int i = chars.length - 1; i >= 0; i--) {
            resultChar[index] = chars[i];
            index++;
        }
        return new String(resultChar);
    }

    private static int stringToInt(String s) {
        Integer integer = 0;
        try {
            integer = Integer.valueOf(s);
        } catch (Exception e) {
        }
        return integer;
    }

    public static void main(String[] args) {
        int a = -2147483648;
//        String s = inverse("-123");
        int reverse = reverse(a);
        System.out.printf("R:  " + reverse);
    }


}
